package com.example.demo.controller;

import com.example.demo.tool.B;
//import jdk.internal.joptsimple.util.RegexMatcher;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Date;

@Controller
public class demo3uploadcontroller {

    //接受文件，上传到tomcat
    //方法的参数设置multipartfile类型参数，参数名和前端name一样，后封装
    @PostMapping("/upload")
    @ResponseBody
    public B upload(MultipartFile img, HttpServletRequest request) throws IOException { //请求参数给下面的request.getServletContext()...
        System.out.println(img);
        //判断封装成功，改img的名字，输出null
        /**
         * 1.或得上传对象，参数img就是文件对象
         2.获取最终上传的目的地（服务器中当前目录下）
         */
        //文件在哪
        //servlet 是运行在 Web 服务器中的小型 Java 程序（即：服务器端的小应用程序）。servlet 通过 HTTP接收和响应来自 Web 客户端的请求。
        //通过servlet方法获得路径，最终上传到tomcatde 的/upload目录下
        String realpath= request.getServletContext().getRealPath("/upload");//获得servlet的全局对象和路径
        System.out.println(realpath);
        //创建最终目的地
        File file = new File(realpath);
        //判断该文件是否在,否则建
        if (!file.exists()){
            file.mkdir(); //mkdir--创建目录
        }
        //获得文件名，防止文件重名，
        String fileName = img.getOriginalFilename();
        System.out.println(fileName);
        //根据.拆分字符串，获得后缀名
        //正则表达式表述了一种字符串匹配的模式，可以用来检索、替换那些符合模式的文本。
       // String regex;
        String s = "\\.";
        String[] split = fileName.split(s);
        System.out.println(Arrays.toString(split));
        String suffix=split[split.length-1];
        //以当前好苗子为文件名
        long prefix=new Date().getTime();
        //拼接文件名（前缀+后缀）
        String newfilename=prefix+"."+suffix;
        System.out.println("新的文件名："+newfilename);
        //最后路径+文件名
        File newFile= new File(file,newfilename);
        //工具上传
        FileUtils.writeByteArrayToFile(newFile,img.getBytes());
        //返回路径，看是否上传成功
      //  String path="http:"+newfilename;


        return B.ok("http://localhost:8080/upload/"+newfilename);
    }




}
